#ifndef COMMANDS_LIST_HH_
# define COMMANDS_LIST_HH_

# include <string>
# include <vector>

/** List of availables commands
 ** a command is following CHAT_DEFAULT_COMMAND_CHAR
 ** which *MUST* be the first input char
 ** an instance of Command class is created once user sends Input
 ** sended Input do *NOT* contains first char ('/')
 **
 ** aliases will *NOT* be stored on the server
 */


/** Server have to test user's right before executing cmd
 ** cd check it on client to expose potential hack
 ** (as cmd is send by user)
 ** Server will probably have to set a waiting time depending on:
 **   user sending frequency,
 **   Server load
 ** chat will run in a low priority thread
 ** add column BlackList in DB (storing ip)
 **   not safe, wrong positives but, a beginning
 */

class CommandList // rename this: parser ?
// cmdList
{
public:
  // __________ Commands which requires a Server request

  /** diplay connected users list
   ** \param id region id where we'll search users
   ** \param str only users name matching str (regexp ?)
   */
  void Command::who(unsigned int id, std::string str);



  // __________ Commands executed only on Client

  /** display history
   ** matching words:
   **   history,
   **   hist
   */
  void Command::history();


  /** generic help call
   ** help over chat itself
   ** help command call on 'help' || '?'
   */
  void Command::help();


  /** display help about a Command
   **
   */
  void Command::help(std::string);


  /** shows commands list on 'list' call
   */
  void Command::showCommandList();
};

#endif /* !COMMANDS_LIST_HH_ */
